package br.edu.unilasalle.simon_api.domain;

// Generated 08/03/2014 18:19:52 by Hibernate Tools 4.0.0

import static javax.persistence.GenerationType.IDENTITY;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;

import br.edu.unilasalle.simon_api.util.StringUtil;

/**
 * Funcionario generated by hbm2java
 */
@Entity
@Table(name = "funcionario", catalog = "simon")
@JsonIgnoreProperties(value = { "handler", "hibernateLazyInitializer", "usuarios", "vendas" })
public class Funcionario extends BaseEntityAtivo<Long> {

	private static final long serialVersionUID = 4621118369826754626L;
	
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id", unique = true, nullable = false)
	private Long id;
	
	@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "id_endereco", nullable = false)
	private EnderecoEntidade enderecoEntidade;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_loja", nullable = false)
	private Loja loja;
	
	@Column(name = "nome", nullable = false, length = 50)
	private String nome;
	
	@Column(name = "sobrenome", nullable = false, length = 100)
	private String sobrenome;
	
	@Column(name = "telefone", nullable = false, length = 15)
	private String telefone;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_nasc", nullable = false, length = 10)
	private Date dataNasc;
	
	@Column(name = "cpf", nullable = false, length = 11)
	private String cpf;
	
	@Column(name = "rg", nullable = false, length = 10)
	private String rg;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_admissao", nullable = false, length = 10)
	private Date dataAdmissao;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_demissao", length = 10)
	private Date dataDemissao;
	
	@Column(name = "cargo", nullable = false, length = 100)
	private String cargo;
	
	@Column(name = "salario", nullable = false, precision = 12, scale = 2)
	private Double salario;
	
	@Column(name = "meta", nullable = false, precision = 12, scale = 2)
	private Double meta;
	
	@Column(name = "comissao", nullable = false, precision = 12, scale = 0)
	private Double comissao;
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "funcionario")
	private Set<Usuario> usuarios = new HashSet<Usuario>(0);
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "funcionario")
	private Set<Venda> vendas = new HashSet<Venda>(0);
	
	@Transient
	private String nomeCompleto;

	public Funcionario() {
	}
	
	public Funcionario(Long id) {
		this.id = id;
	}
	
	public Funcionario(Long id, String nome, String sobrenome, String telefone, Character ativo) {
		this.id = id;
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.telefone = telefone;
		this.ativo = ativo;
	}

	public Funcionario(EnderecoEntidade enderecoEntidade, Loja loja, Long id, 
			String nome, String sobrenome, String telefone, Date dataNasc, 
			String cpf, String rg, Date dataAdmissao, String cargo, Double salario, 
			Double meta, Double comissao,	Character ativo) {
		this.enderecoEntidade = enderecoEntidade;
		this.loja = loja;
		this.id = id;
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.telefone = telefone;
		this.dataNasc = dataNasc;
		this.cpf = cpf;
		this.rg = rg;
		this.dataAdmissao = dataAdmissao;
		this.cargo = cargo;
		this.salario = salario;
		this.meta = meta;
		this.comissao = comissao;
		this.ativo = ativo;
	}

	public Funcionario(EnderecoEntidade enderecoEntidade, Loja loja,
			String nome, String sobrenome, String telefone, Date dataNasc, 
			String cpf, String rg, Date dataAdmissao, Date dataDemissao, 
			String cargo, Double salario, Double meta, Double comissao, 
			Character ativo, Set<Usuario> usuarios, Set<Venda> vendas) {
		this.enderecoEntidade = enderecoEntidade;
		this.loja = loja;
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.telefone = telefone;
		this.dataNasc = dataNasc;
		this.cpf = cpf;
		this.rg = rg;
		this.dataAdmissao = dataAdmissao;
		this.dataDemissao = dataDemissao;
		this.cargo = cargo;
		this.salario = salario;
		this.meta = meta;
		this.comissao = comissao;
		this.ativo = ativo;
		this.usuarios = usuarios;
		this.vendas = vendas;
	}

	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public EnderecoEntidade getEnderecoEntidade() {
		return this.enderecoEntidade;
	}

	public void setEnderecoEntidade(EnderecoEntidade enderecoEntidade) {
		this.enderecoEntidade = enderecoEntidade;
	}

	public Loja getLoja() {
		return this.loja;
	}

	public void setLoja(Loja loja) {
		this.loja = loja;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return this.sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getTelefone() {
		return this.telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = StringUtil.onlyNumbers(telefone);
	}

	public Date getDataNasc() {
		return this.dataNasc;
	}

	public void setDataNasc(Date dataNasc) {
		this.dataNasc = dataNasc;
	}

	public String getCpf() {
		return this.cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = StringUtil.onlyNumbers(cpf);
	}

	public String getRg() {
		return this.rg;
	}

	public void setRg(String rg) {
		this.rg = StringUtil.onlyNumbers(rg);
	}

	public Date getDataAdmissao() {
		return this.dataAdmissao;
	}

	public void setDataAdmissao(Date dataAdmissao) {
		this.dataAdmissao = dataAdmissao;
	}

	public Date getDataDemissao() {
		return this.dataDemissao;
	}

	public void setDataDemissao(Date dataDemissao) {
		this.dataDemissao = dataDemissao;
	}

	public String getCargo() {
		return this.cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}
	
	public Double getSalario() {
		return this.salario;
	}

	public void setSalario(Double salario) {
		this.salario = salario;
	}
	
	public Double getMeta() {
		return this.meta;
	}

	public void setMeta(Double meta) {
		this.meta = meta;
	}
	
	public Double getComissao() {
		return this.comissao;
	}

	public void setComissao(Double comissao) {
		this.comissao = comissao;
	}
	
	public Set<Usuario> getUsuarios() {
		return this.usuarios;
	}

	public void setUsuarios(Set<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	
	public Set<Venda> getVendas() {
		return this.vendas;
	}

	public void setVendas(Set<Venda> vendas) {
		this.vendas = vendas;
	}
	
	public String getNomeCompleto() {
		return this.nome + " " + this.sobrenome;
	}
	
	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = getNomeCompleto();
	}

}
